home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Moscow ML 1.31 / source code / mosml / src / mosmllib / test / bytechar.sml < prev    next >
Encoding:
Text File  |  1996-07-03  |  6.0 KB  |  170 lines  |  [TEXT/R*ch]

  1. (* test/bytechar.sml -- test cases for Byte and Char, suitable for ASCII
  2.    PS 1994-12-10, 1995-05-11 *)
  3.  
  4. use "auxil.sml";
  5.  
  6. local 
  7.  
  8. in 
  9. val test1 = checkrange (0,255) 
  10.     (fn i => (Word8.wordToInt o Byte.ord o Byte.chr
  11.           o Word8.intToWord) i = i);
  12.  
  13. val test2 = checkrange (0,Char.maxOrd) 
  14.     (fn i => (Word8.wordToInt o Byte.ord o Char.chr) i = i);
  15.  
  16. val test3 = checkrange (0,255) 
  17.     (fn i => (Char.ord o Byte.chr o Word8.intToWord) i = i);
  18.  
  19. val test4 = checkrange (0, Char.maxOrd) 
  20.     (fn i => (Char.ord o Char.chr) i = i);
  21.  
  22. val test5 = (Char.chr ~1 seq "WRONG") handle Char.Chr => "OK" | _ => "WRONG";
  23.  
  24. val test6 = (Char.chr (Char.maxOrd+1) seq "WRONG") 
  25.             handle Char.Chr => "OK" | _ => "WRONG";
  26.     
  27. val test7 = check("" = Byte.string (Word8Vector.fromList []));
  28.  
  29. val test8 = 
  30.     check("ABDC" = (Byte.string o Word8Vector.fromList o map Word8.intToWord)
  31.                [65, 66, 68, 67]);
  32.  
  33. val test9 = check("" = Byte.extract(Word8Array.fromList [], 0, SOME 0));
  34.  
  35. local 
  36.     val arr = Word8Array.tabulate(10, fn i => Word8.intToWord(i+65))
  37. in
  38. val test10a = check("" = Byte.extract(arr, 0, SOME 0));
  39. val test10b = check("" = Byte.extract(arr, 10, SOME 0) 
  40.             andalso "" = Byte.extract(arr, 10, NONE));
  41. val test10c = check("BCDE" = Byte.extract(arr, 1, SOME 4));
  42. val test10d = (Byte.extract(arr, ~1, SOME 0) seq "WRONG")
  43.               handle Subscript => "OK" | _ => "WRONG";
  44. val test10e = (Byte.extract(arr, 11, SOME 0) seq "WRONG")
  45.               handle Subscript => "OK" | _ => "WRONG";
  46. val test10f = (Byte.extract(arr, 0, SOME ~1) seq "WRONG")
  47.               handle Subscript => "OK" | _ => "WRONG";
  48. val test10g = (Byte.extract(arr, 0, SOME 11) seq "WRONG")
  49.               handle Subscript => "OK" | _ => "WRONG";
  50. val test10h = (Byte.extract(arr, 10, SOME 1) seq "WRONG")
  51.               handle Subscript => "OK" | _ => "WRONG";
  52. val test10i = (Byte.extract(arr, ~1, NONE) seq "WRONG")
  53.               handle Subscript => "OK" | _ => "WRONG";
  54. val test10j = (Byte.extract(arr, 11, NONE) seq "WRONG")
  55.               handle Subscript => "OK" | _ => "WRONG";
  56. end
  57.  
  58. val test18 = check(not (Char.contains "" (Char.chr 65))
  59.                    andalso not (Char.contains "aBCDE" (Char.chr 65))
  60.                    andalso (Char.contains "ABCD" (Char.chr 67))
  61.            andalso not (Char.contains "" #"\000")
  62.            andalso not (Char.contains "" #"\255")
  63.            andalso not (Char.contains "azAZ09" #"\000")
  64.            andalso not (Char.contains "azAZ09" #"\255"));
  65.  
  66. val test19 = check(Char.notContains "" (Char.chr 65)
  67.                    andalso Char.notContains "aBCDE" (Char.chr 65)
  68.                    andalso not (Char.notContains "ABCD" (Char.chr 67))
  69.                    andalso Char.notContains "" #"\000"
  70.                    andalso Char.notContains "" #"\255"
  71.                    andalso Char.notContains "azAZ09" #"\000"
  72.                    andalso Char.notContains "azAZ09" #"\255");
  73.  
  74. val test20 = check(Char.ord Char.maxChar = Char.maxOrd);
  75.  
  76. local 
  77. fun mycontains s c = 
  78.     let val stop = String.size s
  79.     fun h i = i < stop andalso (c = String.sub(s, i) orelse h(i+1))
  80.     in h 0 end;
  81.  
  82. (* Check that p(c) = (mycontains s c) for all characters: *)
  83. fun equivalent p s = 
  84.     let fun h n =
  85.     n > 255 orelse 
  86.     (p (chr n) = mycontains s (chr n)) andalso h(n+1)
  87.     in h 0 end
  88.  
  89. fun checkset p s = check'(fn _ => equivalent p s);
  90.  
  91. val graphchars = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\
  92.  \[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\
  93.  \\128\129\130\131\132\133\134\135\136\137\138\139\140\141\
  94.  \\142\143\144\145\146\147\148\149\150\151\152\153\154\155\156\
  95.  \\157\158\159\160\161\162\163\164\165\166\167\168\169\170\171\
  96.  \\172\173\174\175\176\177\178\179\180\181\182\183\184\185\186\
  97.  \\187\188\189\190\191\192\193\194\195\196\197\198\199\200\201\
  98.  \\202\203\204\205\206\207\208\209\210\211\212\213\214\215\216\
  99.  \\217\218\219\220\221\222\223\224\225\226\227\228\229\230\231\
  100.  \\232\233\234\235\236\237\238\239\240\241\242\243\244\245\246\
  101.  \\247\248\249\250\251\252\253\254";
  102.  
  103. val ascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\n\^K\^L\^M\^N\^O\^P\
  104.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  105.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  106.  \ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127" 
  107.  
  108. val lowerascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\n\^K\^L\^M\^N\^O\^P\
  109.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  110.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  111.  \abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127" 
  112.  
  113. val upperascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\n\^K\^L\^M\^N\^O\^P\
  114.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  115.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  116.  \ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\127" 
  117.  
  118. val allchars = 
  119.     let fun h 0 res = chr 0 :: res
  120.       | h n res = h (n-1) (chr n :: res)
  121.     in h 255 [] end
  122.  
  123. open Char
  124. in
  125.  
  126. val test21 = 
  127.     checkset isLower "abcdefghijklmnopqrstuvwxyz";
  128. val test22 = 
  129.     checkset isUpper "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  130. val test23 = 
  131.     checkset isDigit "0123456789";
  132. val test24 = 
  133.     checkset isAlpha "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  134. val test25 = 
  135.     checkset isHexDigit "0123456789abcdefABCDEF";
  136. val test26 = 
  137.     checkset isAlphaNum 
  138.        "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  139. val test27 = 
  140.     checkset isPrint (" " ^ graphchars)
  141. val test28 = 
  142.     checkset isSpace " \009\010\011\012\013";
  143. val test29 = 
  144.     checkset isGraph graphchars
  145. val test30 = 
  146.     checkset isAscii ascii
  147.  
  148. val test31 = 
  149.     check'(fn _ => map toLower (explode ascii) = explode lowerascii)
  150. val test32 = 
  151.     check'(fn _ => map toUpper (explode ascii) = explode upperascii)
  152. val test33 = 
  153.     check'(fn _ => 
  154.        map toUpper (explode graphchars)
  155.        seq map toLower (explode graphchars)
  156.        seq true)
  157.  
  158. val test34a =
  159.     check'(fn _ => 
  160.        map pred (List.drop(allchars, 1)) = List.take(allchars, 255));
  161. val test34b = (pred #"\000" seq "WRONG")
  162.               handle Chr => "OK" | _ => "WRONG";
  163. val test35a =
  164.     check'(fn _ => 
  165.        map succ (List.take(allchars, 255)) = List.drop(allchars, 1));
  166. val test35b = (succ #"\255" seq "WRONG")
  167.               handle Chr => "OK" | _ => "WRONG";
  168. end
  169. end
  170.